#include <bits/stdc++.h>
/*
给定一个长度为 n 的整数序列，请找出最长的不包含重复的数的连续区间，输出它的长度。

输入格式
第一行包含整数 n。

第二行包含 n 个整数（均在 0∼105 范围内），表示整数序列。

输出格式
共一行，包含一个整数，表示最长的不包含重复的数的连续区间的长度。

数据范围
1≤n≤105
输入样例：
5
1 2 2 3 5
输出样例：
3

注：数组不是单调的。可以第一个位置和最后一个位置是同样的数字
*/
using namespace std;
/*
双指针+hash

对于一个区间，[j,i]  res[i] 是以i结尾的最长连续不重复子序列
可以用map存放这个区间内所有元素的(index,a[i])
如果重复了，那就把j移动到 重复的那个a[i]对应的那个index上


*/
int len,*a;
map<int,int> mp;
int main()
{
    cin>>len;
    a = new int[len+1];
    for(int i=1;i<=len;i++)
        cin>>a[i];
        // if (mp[a[i]]==0)
        // mp.insert(make_pair(a[i],0));   cpp的mp如果不存在，自动返回0 所以无须这么做
    

    int i,j;
    i = j = 1;
    int curlen = 0;
    int maxlen = 0;
    while(i<=len){
        if (mp[a[i]]==0){
            curlen++;
        }else{
            int orgj = j; //记录下移动前的j的位置
           j = mp[a[i]]+1; //j移动到第一个不重复的地方+
            for(int s =  orgj;s<=mp[a[i]];s++){
                mp[a[s]] = 0; //把区间前（移动前的j到现在的j前面一个位置）的数字都归0
            }
             
            curlen = i - j + 1;
           // cout<<"i:"<<i<<"   "<<a[i]<<"   repeated,j moves to"<<j<<" curlen:"<<curlen<<"  maxlen:"<<maxlen<<endl;
        }
         mp[a[i]]=i; //填入当前的数字到hash
        maxlen = max(maxlen,curlen);
        i++;
    }
    cout<<maxlen;

    return 0;
}
